/*
 * 功能：实现Ajax请求
 *
 *
 */
import store from '@/store'
import axios from 'axios'
import {Message} from 'element-ui'

//实例化axios实例
let instance = axios.create({
  baseURL: process.env.BASE_URL,
  timeout: 3000
});
//安装请求截取器
instance.interceptors.request.use(function (config) {
  // 增加X-Token请求头
  if(store.getters.token){
    config.headers = {
      "X-Token": store.getters.token
    }
  }

  return config;
}, function (error) {
  // Do something with request error
  console.log(`[interceptors.request] ${error}`)

  Message({message: error.toString(), type: 'error'})

  return Promise.reject(error);
});

// 安装响应截取器
// 全局处理Ajax调用
// 正常处理(code)
//    -20000-成功
//
// 错误处理
// 错误类型码(code)：
//    -50000 用户名或密码不正确
//    -50008 您没有有效的登录凭据
//    -50014 您的登录已过期，将自动转向登录页面
//    -60000 HTTP错误
//    -
instance.interceptors.response.use(function (response) {
  //检查应用程序级的错误
  if(response.data.code !== 20000) {
    let message = '非预期错误，请联系程序员'
    if(response.data.code === 50000){
      message = "用户名或密码不正确"
    } else if (response.data.code === 50008) {
      message = "您没有有效的登录凭据"
    } else if (response.data.code === 50014) {
      message = "您的登录已过期，将自动转向登录页面"
    }

    //提示用户应用程序级错误信息
    Message(message)

    //返回reject
    return Promise.reject({code: response.data.code, messsage: message});
  }

  //返回正常情况下的响应数据
  return response.data;
}, function (error) {
  //发生HTTP错误时进行处理
  console.log(`[interceptors.response] ${error}`)
  //提示用户HTTP错误信息
  Message({message: error.toString(), type: 'error'})

  return Promise.reject({code: 60000, messsage: error})
});

export default instance
